// Gravité - Version 1.3

// Ce script applique une force gravitationnelle au calque 1.
// La vitesse du calque au début de la zone de travail
// est prise comme vitesse initiale.

//      CALQUE                                 PROPRIETE                  DIMENSION
//      -------                                 ----------                  ---------- 
// 1: Calque à modifier                   indifférent                   indifférent
// 2: indifférent                             indifférent                   indifférent

if (time() == start_time) {
	vel = tmap (time() + step_time, value(pop_layer(1), position)) -
           value(pop_layer(1), position);
	damping = 0.95;					//Frottements (0 = infinis, 1 = nuls)
	grav = 0.9;						// Amplitude de la force de gravité
	grav_dir = {0,1,0};				// Direction de la gravité
	accel = grav * grav_dir;		// Vecteur gravité

	new_pos = value(pop_layer(1), position);
} else {

	vel = vel*damping + accel;						// Ajout d'une accélération discrète à la vitesse
	new_pos = new_pos + vel;		         // Ajout d'une vitesse discrète à la position
	
	// Test de collision avec les bords de la composition et rebond éventuel
	if (new_pos[X] < 0) {
		new_pos[X] = 0;
		vel = {-vel[X], vel[Y]};
	}
	if (new_pos[Y] < 0) {
		new_pos[Y] = 0;
		vel = {vel[X], -vel[Y]};
	}
	if (new_pos[X] > comp_size[X]) {
		new_pos[X] = comp_size[X];
		vel = {-vel[X], vel[Y]};
	}
	if (new_pos[Y] > comp_size[Y]) {
		new_pos[Y] = comp_size[Y];
		vel = {vel[X], -vel[Y]};
	}	
}
value(pop_layer(1), position) = new_pos;
